Xceed Toolkit Plus for WPF v5.0 Documentation
In This Topic
    Selecting all Data Items in a Group
    In This Topic

    The following example demonstrates how to select all the data items contained in a group by adding them to a grid's selected-items collection when a group-header control is pressed. In the case where a group contains child groups, all the data items in the child groups will also be selected.

    XAML
    Copy Code
      <Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid">
        <Grid.Resources>
          <xcdg:DataGridCollectionViewSource x:Key="cvs_orders"
                                        Source="{Binding Source={x:Static Application.Current},
                                                            Path=Orders}">
            <xcdg:DataGridCollectionViewSource.GroupDescriptions>
              <xcdg:DataGridGroupDescription PropertyName="ShipCountry"/>
              <xcdg:DataGridGroupDescription PropertyName="ShipCity"/>
            </xcdg:DataGridCollectionViewSource.GroupDescriptions>
          </xcdg:DataGridCollectionViewSource>
        <Style TargetType="{x:Type xcdg:GroupHeaderControl}">
          <EventSetter Event="PreviewMouseLeftButtonDown"
                       Handler="SelectRows"/>
        </Style>
      </Grid.Resources>
        <xcdg:DataGridControl x:Name="OrdersGrid"
                            ItemsSource="{Binding Source={StaticResource cvs_orders}}"/>
      </Grid>
    VB.NET
    Copy Code
    Private Sub SelectRows( ByVal sender As Object, ByVal e As MouseButtonEventArgs )
      Dim groupHeaderControl As GroupHeaderControl = TryCast( sender, GroupHeaderControl );
      If groupHeaderControl Is Nothing Then
        Return;
      End If
      Dim context As DataGridContext = DataGridControl.GetDataGridContext( groupHeaderControl )
      Dim header As GroupHeaderFooterItem = TryCast( context.GetItemFromContainer( grouHeaderControl, GroupHeaderFooterItem )
      If Not header.Equals( GroupHeaderFooterItem.Empty ) Then
        Dim group As CollectionViewGroup = context.GetParentGroupFromItem( header )
        If Not group Is Nothing Then
          For Each item As Object In group.Items
            If TypeOf item Is CollectionViewGroup Then
              Me.SelectRecurse( context, CType( item, CollectionViewGroup ) )
            Else
              context.SelectedItems.Add( item )
            End If
          Next item
        End If
      End If
    End Sub
    Private Sub SelectRecurse( ByVal context As DataGridContext, ByVal group As CollectionViewGroup )
      For Each item As Object In group.Items
        If TypeOf item Is CollectionViewGroup Then
          Me.SelectRecurse( context, CType( item, CollectionViewGroup ) )
        Else
          context.SelectedItems.Add( item )
        End If
      Next item
    End Sub
    C#
    Copy Code
    private void SelectRows( object sender, MouseEventArgs e )
    {
    GroupHeaderControl groupHeaderControl = sender as GroupHeaderControl;
    if( groupHeaderControl == null )
      return;
    DataGridContext context = DataGridControl.GetDataGridContext( groupHeaderControl );
    GroupHeaderFooterItem header = ( GroupHeaderFooterItem )context.GetItemFromContainer( groupHeaderControl );
    if( !header.Equals( GroupHeaderFooterItem.Empty ) )
    {
      CollectionViewGroup group = context.GetParentGroupFromItem( header );
      if( group != null )
      {
        foreach( object item in group.Items )
        {
          if( item is CollectionViewGroup )
          {
            this.SelectRecurse( context, ( CollectionViewGroup )item );
          }
          else
          {
            context.SelectedItems.Add( item );
          }
        }
      }
    }
    }
    private void SelectRecurse( DataGridContext context, CollectionViewGroup group )
    {
    foreach( object item in group.Items )
    {
      if( item is CollectionViewGroup )
      {
        this.SelectRecurse( context, ( CollectionViewGroup )item );
      }
      else
      {
        context.SelectedItems.Add( item );
      }
    }
    }